// #[derive(Debug)]

// struct Rectangle {
//     width: u32,
//     height: u32,
// }

// fn main() {
//     struct Color(u8, u8, u8);
//     struct Point(f64, f64);

//     let black = Color(0, 0, 0);
//     let origin = Point(0.0, 0.0);

//     println!("black = ({}, {}, {})", black.0, black.1, black.2);
//     println!("origin = ({}, {})", origin.0, origin.1);

//     let rect1 = Rectangle { width: 30, height: 50 };

//     // 在 println 和 print 宏中就可以用 {:?} 占位符输出一整个结构体
//     println!("rect1 is {:?}", rect1);

//     // 属性较多的话可以使用另一个占位符 {:#?}
//     println!("rect1 is {:#?}", rect1);
// }

// 结构体方法
// 结构体方法的第一个参数必须是 &self，不需声明类型，因为 self 不是一种风格而是关键字
// struct Rectangle {
//     width: u32,
//     height: u32,
// }
   
// impl Rectangle {
//     fn area(&self) -> u32 {
//         self.width * self.height
//     }

//     fn wider(&self, rect: &Rectangle) -> bool {
//         self.width > rect.width
//     }
// }

// fn main() {
//     let rect1 = Rectangle { width: 30, height: 50 };
//     println!("rect1's area is {}", rect1.area());

//     // 计算 rect1 是否比 rect2 更宽
//     let rect2 = Rectangle { width: 40, height: 20 };
//     println!("{}", rect1.wider(&rect2));
// }

#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn create(width: u32, height: u32) -> Rectangle {
        Rectangle { width, height }
    }
}

fn main() {
    let rect = Rectangle::create(30, 50);
    println!("{:?}", rect);
}
